Skip to main content

Daily Invoice Export

Introduction

This is an export file that consists of invoices and credits that are generated on the day of export.

Purpose

Suppliers using visn platform requires a compilation of invoices and credits that are generated on the day of export as a single which they can further use for the internal monitoring purposes and cross checking the billing issued by customers.

File format

Comma Separated Values - *.csv

Terminology

Record SetA set of rows exported into the CSV file, it consists of the records in the order as in below
OrderIndicatorContext
1.xTHTransaction Header
2.xRESupplier/Repairer Details
3.xINInvoice Credit Note Details
4.x.1ILItem Line Details
4.x.2.nIPParts Record
4.x.3TLTotal Line Cost Record
5.xTCTotal Transaction Cost Record
6.xVAVAT Summary Record
7.xTTTransaction Trailer Record
* x denotes an index of the transaction relative to the enquiry that is invoiced/credited on the day of export
* n denotes an index of parts/fluids added in a job line of specific enquiry
RecordA particular line of the export that is either of indicators allowed in a record set, along with one record for the entire file among the following
  1. HE - File Header
  2. LC - Scheme Operator Address Detail
  3. FT - File Trailer Record

Records

File Header - HE

  • This record is mandatory
  • This is the first line of the export file
  • This line does not belong to a record set, instead common for the whole file
Sr.NoField LabelData TypeLengthNotesMandatory
1Record Type IndicatorText2Must be "HE"Y
2Record Version NumberInteger2Must be "6"Y
3Scheme Operator ReferenceInteger7ViSN Customer Account NumberY
4Type of TransactionText1- Must be "I".

- The export process includes both invoices and credits in a single file. However, For HE Record the "Transaction Type" field doesn't differentiate between them, consistently displaying "Invoice"

- The "Transaction Type" field acts like a flag indicating the file format for export in HE record, rather than the actual type of transaction (invoice or credit).
Y
5File Serial NumberInteger8Sequential Count from 1

Each lease company (identified by /leasecompany/{leaseId}) will have a counter within its export settings (at /exports/settings). This counter, named exportFileSequenceNumber, will keep track of the number of export files generated

The value from the counter is fetched into the column at the time of export
Y
6Run DateInteger8CCYYMMDD (e.g., "20031225")Y
7Run TimeInteger6HHMMSS (e.g., "232830")Y
8End of Record MarkerControl1Carriage Return Code (ASCII 10)Y

Scheme Operator Address Detail - LC

  • This record is mandatory
  • This line does not belong to a record set, instead common for the whole file
  • Contains the details of the customer for which the export is being generated
Sr.NoField LabelData TypeLengthNotesMandatory
1Record Type IndicatorText2Must be "LC"Y
2Record Type Version NumberInteger2Must be "6"Y
3Scheme Operator ReferenceInteger7ViSN Customer Account Number

Within each lease record in Firebase, stored under the path /leasecompany/{leaseId}, a nested field named leaseDetails holds further details about the lease. This leaseDetails field includes another nested field named accountNumber that specifically stores the account number associated with the lease. This value will be fetched into the column at the time of export.
Y
4Scheme Operator Account NameText30Name of the lease company

If the 'Rate Card' type of the 'Invoiced' or 'Credited' enquiry is either "ViSN with DI Network and Paybill" or "ViSN Hybrid - Customer’s Network and DI Network with Paybill", and the 'Supplier's Paybill' value at the time of enquiry creation was 'VISN', then the name is fetched from the nested field paybillDetailsForInvoiceExport.paybillCompanyName at the path /leasecompany/{leaseId}/exports/{year}/{month}/{day}/enquiries/{enquiryId}. This name is displayed alongside the lease company name. Otherwise, the name is fetched from the name field of the lease record stored at the path /leasecompany/{leaseId}.
Y
5Scheme Operator Address 1Text30If the 'Rate Card' type of the 'Invoiced' or 'Credited' enquiry is either "ViSN with DI Network and Paybill" or "ViSN Hybrid - Customer’s Network and DI Network with Paybill", and the 'Supplier's Paybill' value at the time of enquiry creation was 'VISN', then the field number is fetched from the nested field paybillDetailsForInvoiceExport.address at the path /leasecompany/{leaseId}/exports/{year}/{month}/{day}/enquiries/{enquiryId}. Otherwise, the field number is fetched from the address stored under the path /leasecompany/{leaseId}, a nested field named address holds the address of the lease.Y
6Scheme Operator Address 2Text30If the 'Rate Card' type of the 'Invoiced' or 'Credited' enquiry is either "ViSN with DI Network and Paybill" or "ViSN Hybrid - Customer’s Network and DI Network with Paybill", and the 'Supplier's Paybill' value at the time of enquiry creation was 'VISN', then the field address1 is fetched from the nested field paybillDetailsForInvoiceExport.address at the path /leasecompany/{leaseId}/exports/{year}/{month}/{day}/enquiries/{enquiryId}. Otherwise, the field address1 is fetched from the address stored under the path /leasecompany/{leaseId}, a nested field named address holds the address of the lease.Y
7Scheme Operator Address 3Text30If the 'Rate Card' type of the 'Invoiced' or 'Credited' enquiry is either "ViSN with DI Network and Paybill" or "ViSN Hybrid - Customer’s Network and DI Network with Paybill", and the 'Supplier's Paybill' value at the time of enquiry creation was 'VISN', then the field address2 is fetched from the nested field paybillDetailsForInvoiceExport.address at the path /leasecompany/{leaseId}/exports/{year}/{month}/{day}/enquiries/{enquiryId}. Otherwise, the field address2 is fetched from the address stored under the path /leasecompany/{leaseId}, a nested field named address holds the address of the lease.
8Scheme Operator Address 4Text30If the 'Rate Card' type of the 'Invoiced' or 'Credited' enquiry is either "ViSN with DI Network and Paybill" or "ViSN Hybrid - Customer’s Network and DI Network with Paybill", and the 'Supplier's Paybill' value at the time of enquiry creation was 'VISN', then the field address3 is fetched from the nested field paybillDetailsForInvoiceExport.address at the path /leasecompany/{leaseId}/exports/{year}/{month}/{day}/enquiries/{enquiryId}. Otherwise, the field address3 is fetched from the address stored under the path /leasecompany/{leaseId}, a nested field named address holds the address of the lease.
9Scheme Operator Address 5Text30 If the 'Rate Card' type of the 'Invoiced' or 'Credited' enquiry is either "ViSN with DI Network and Paybill" or "ViSN Hybrid - Customer’s Network and DI Network with Paybill", and the 'Supplier's Paybill' value at the time of enquiry creation was 'VISN', then the field county is fetched from the nested field paybillDetailsForInvoiceExport.address at the path /leasecompany/{leaseId}/exports/{year}/{month}/{day}/enquiries/{enquiryId}. Otherwise, the field county is fetched from the address stored under the path /leasecompany/{leaseId}, a nested field named address holds the address of the lease.
10Scheme Operator PostcodeText8If the 'Rate Card' type of the 'Invoiced' or 'Credited' enquiry is either "ViSN with DI Network and Paybill" or "ViSN Hybrid - Customer’s Network and DI Network with Paybill", and the 'Supplier's Paybill' value at the time of enquiry creation was 'VISN', then the field postCode is fetched from the nested field paybillDetailsForInvoiceExport.address at the path /leasecompany/{leaseId}/exports/{year}/{month}/{day}/enquiries/{enquiryId}. Otherwise, the field postCode is fetched from the address stored under the path /leasecompany/{leaseId}, a nested field named address holds the address of the lease.
11End of Record MarkerControl1Carriage Return Code (ASCII 10)Y

Transaction Header - TH

  • Record is mandatory for each transaction in the record set
  • More than one record can exist in each file
Sr.NoField LabelData TypeLengthNotesMandatory
1Record Type IndicatorText2Must be "TH"Y
2Record Type Version NumberInteger2Must be "6"Y
3ViSN Enquiry NumberInteger8For invoice transactions (transaction type 'I'), enquiry number will be fetched into this column.

For credit transactions (transaction type 'C'), prepend the enquiry number with "1000". In other words, add "1000" to the left side of the enquiry number. For example, if the enquiry number is 6248, the resulting padded number would be "10006248".
Y
4Invoice Extract Analysis Ref.Integer2Constant "01"Y
5ViSN Enquiry NumberText10This column will be populated with the enquiry number
6Vehicle RegistrationText14This column will be populated with the VRM (Vehicle Registration Mark) of the vehicle for which enquiry/job is raisedY
7Odometer ReadingInteger7This column captures the mileage from the jobsheet, indicating the vehicle's mileage at the time of repair.Y (except for credits)
8Transaction DateInteger8CCYYMMDD (e.g., "20031225")

For both invoices and credit records, the system will utilize the vehicle's check-in time at the garage as the standardized transaction date.
Y
9Asset NumberText10The asset number of the vehicle associated with the enquiry will be populated into this columnY
10Card NumberText19Blank Space
11Driver NameText40The driver name of the vehicle associated with the enquiry will be populated into this column
12Purchase Order NumberText20Mandatory if job authorised on the ViSN platform.

Purchase Order that is captured in enquiry will be populated into this column
13Transaction Serial NumberInteger8Constant '1'Y
14Job Completion DateInteger8CCYYMMDD (e.g., "20031225").

The date the job was closed and marked as 'Job Complete'
Y
15VINText20The VIN (Vehicle Identification Number) of the vehicle associated with the enquiry will be populated into this column
16End of Record MarkerControl1Carriage Return Code (ASCII 10)Y

Supplier/Repairer Details - RE

  • Record is mandatory in each record set
  • One record can exist for each transaction
  • Contains the details of the supplier that carried out the service for the respective enquiry
Sr.NoField LabelData TypeLengthNotesMandatory
1Record Type IndicatorText2Must be "RE"Y
2Record Type Version NumberInteger2Must be "6"Y
3ViSN Repairer Account NumberInteger7DI Group Supplier ID, if no group then DI Supplier ID

Fetched from field named groupId from group record stored at path /leasecompany/{leaseId}/suppliers/{accountId}
Y
4Supplier Account NumberText20Supplier Group ID, if no group then Supplier ID

Fetched from field named supplierId from group record stored at path/ leasecompany /{leaseId} / suppliers / {accountId} / serviceUnits / {serviceUnitObjectID}
Y
5Supplier Account NameText30Supplier Name from Invoice Supplier DetailsY
6Supplier Account Address 1Text30number from Supplier Address Details of Invoice Supplier DetailsY
7Supplier Account Address 2Text30address1 from Supplier Address Details of Invoice Supplier DetailsY
8Supplier Account Address 3Text30address2 from Supplier Address Details of Invoice Supplier Details
9Supplier Account Address 4Text30county from Supplier Address Details of Invoice Supplier Details
10Supplier Account PostcodeText8postcode from Supplier Address Details of Invoice Supplier Details
11Supplier VAT numberText10VAT Number from Invoice Supplier DetailsY
12Scheme Operator Controller IDText10Constant Blank
13Supplier Account Address 5Text30Constant Blank
14Contact Telephone NumberText15A phone number stored in a field named 'contact' of firebase document at / accounts / {accountId} / serviceUnits / {serviceUnitId}
15End of Record MarkerControl1Carriage Return Code (ASCII 10)Y

Invoice Credit Note Details - IN

  • Record is mandatory in each record set
  • Only one record can exist in each transaction
  • More than one record can exist in each file
Sr.NoField LabelData TypeLengthNotesMandatory
1Record Type IndicatorText2Must be "IN"Y
2Record Type Version NumberInteger2Must be "6"Y
3Transaction TypeText1I = Invoice (or) C = CreditY
4Invoice NumberText20ViSN Invoice Number

Invoice -
(or)

Credit -
Y
5Tax Point DateInteger8CCYYMMDD (e.g., "20031225")

Invoice -
(or)

Credit -
Y
6Repairer Invoice TextText16Constant Blank
7Original Invoice NumberText20
  • Blank for transaction type 'I'
  • Mandatory for transaction type 'C', the value will be polled from invoice number captured in invoice drawer at time of invoicing

Y
8Original ViSN Transaction NumberInteger8
  • Blank for transaction type 'I'
  • Mandatory for transaction type 'C', the value will be the enquiry number
9Reason for CreditText30
  • Blank for transaction type 'I'
  • Mandatory for transaction type 'C', the value will be polled from credit reason captured in credit drawer

10Scheme Operator MessageText80- Not In Use
11Scheme Operator Authorisation CodeText10 (20)*- Not In Use
12Invoice DateInteger8CCYYMMDD

The date the invoice is generated will be recorded in this field for both 'I' and 'C' transactions (invoice and credit, respectively).
Y
13Terms StatusText1Constant 'I', I denotes `In terms` here
14End of record MarkerControl1Carriage Return Code (ASCII 10)Y

Item Line Details - IL

  • At least one record must exist in each record set
  • More than one record can exist in each transaction and so in the export file
Sr.NoField LabelData TypeLengthNotesMandatory
1Record Type IndicatorText2Must be "IL"Y
2Record Type Version NumberInteger2Must be "6"Y
3Item NumberInteger2This column indicates the specific job item's position (order) within the job sheet associated with the enquiry.

Y
4Cost TypeText1Will be one of the Cost TypesY
5Charge IndicatorText1Will be one of the Recharge IndicatorsY
6QuantityNumber2.2(e.g., 99.99)

For regular job lines (non-tyre), this value is always 1. However, for tyre jobs, it represents the intended number of tyre replacements on the vehicle.
Y
7Additional Information Text (or) Repairer Authorisation TextText30This column will capture the reason provided by the customer when they manually authorize a job line.
8External Code/ViSN Job CodeText5Integration code to be used in invoice exports
if external code is not available then '0'
9Job line-Item DescriptionText90Description of the Jobline Item

The values for this field differ based on the job line type (details provided below)

  • MOT: Will be constant 'MOT'
  • TYRE: A Concatenated string of Description, Brand of tyre and locations of replacement
  • GLASS: A Concatenated string of Description, Location of Glass Change
  • OTHER: Description of the jobline
10Asset IDText40The asset number of the vehicle associated with the enquiry will be populated into this column
11Full Recharge TextText150This column will contain the recharge notes entered by the customer for each job line associated with recharge details.
12Action codeText3Default on file is code R&R
13Reason CodeText3The values for this field differ based on the job line type (details provided below)

Y
14Goodwill PercentageNumber3.2(e.g. 999.99)
Will be 0.00 by default
Max allowed is 100.00
N
15Labour TimeNumber5.2When Cost Type is "N", is mandatory
(e.g., 99999.99)

This Column will be populated from labour details modal of the jobline

Y
16Labour RateNumber5.2When Cost Type is "N", is mandatory
(e.g., 99999.99)

This Column will be populated from labour details modal of the jobline

Y
17Number of PartsNumber3.2When Cost Type is "N", is mandatory
(e.g., 999.99)

The values for this field differ based on the job line type and job description type (details provided below)

  • TYRE: Will be no.of.locations tyres are expected to be replaced
  • MOT: Will be constant 0
  • OTHER - Catalogue: Will be constant 0
  • OTHER - Non Catalogue: No.of.parts added in the jobline
Y
18Recharge Reason CodeText5When Charge Indicator = "R", is mandatory.
Will be one of the Recharge reason codes
19Recharge AmountNumber5.2(e.g., 99999.99)

This column will contain the recharge amount entered by the customer for each job line associated with recharge details.
20Recharge PercentageNumber3.2(e.g., 999.99)

This column will contain the recharge percentage entered by the customer for each job line associated with recharge details.
21Recharge TextText40This column will contain the recharge notes entered by the customer for each job line associated with recharge details.
22End of Record MarkerControl1Carriage Return Code (ASCII 10)Y

Parts Record - IP

  • Record is optional, available only if any of the job lines of the job sheet has parts/fluids added to them
  • More than one record can exist in each file
Sr.NoField LabelData TypeLengthNotesMandatory
1Record Type IndicatorText2Must be "IP"Y
2Record Type Version NumberInteger2Must be "6"Y
3Item NumberInteger2This column indicates the specific job item's position (order) within the job sheet associated with the enquiry.

Y
4Parts NumberInteger1always "1"Y
5Parts CodeText24During data export, the 'Part line type' field is used to determine the content for this specific column.
6Parts DescriptionText30During data export, the 'Part line type' field is used to determine the content for this specific column.If the content for this column is found to be more than 30 characters in length, it will be trimmed down to 30 characters.Y
7QuantityNumber2.2e.g.,

13.3 for fluid denoting 13ltr 300ml

12 for parts denoting no.of.items
Y
8Unit PriceNumber5.2Price of the part per unit

Price of the fluid per litre

(e.g. 99999.99)
Y
9Parts Discount RateNumber3.2Discount percentage offered on the specific part or fluid

(e.g. 999.99)
Y
10Goodwill PercentageNumber3.2Will be constant 0.00 for Fluids

Will be 0.00 by default and Max allowed is 100.00 for parts

(e.g. 999.99)
N
11Discounted Unit PriceNumber5.2Will be the net price of the part line

To determine the net price, we first calculate the total cost by multiplying the unit price by the quantity. Then, we apply two discounts: a unit discount percentage and a goodwill discount percentage, both based on the initial total cost.

(e.g. 99999.99)
Y
12Nett Parts PriceNumber5.2Will be the net price of the part line

To determine the net price, we first calculate the total cost by multiplying the unit price by the quantity. Then, we apply two discounts: a unit discount percentage and a goodwill discount percentage, both based on the initial total cost.

(e.g. 99999.99)
Y
13VAT RateNumber2.2Mandatory with Invoice or Credit Note (e.g. 99.99)
14Normal Part Text1constant 'Y' is exported.

“Y” = Yes
“N” = No
Y
15Manufacturer of PartText3constant blank is exported.

Mandatory if Normal Part = “N”, however ViSN never exports N for now
16VAT CodeText1Will be one of the VAT codesY
17End of Record MarkerControl1Carriage Return Code (ASCII 10)Y

Total Line Cost Record - TL

  • At least one record must exist in each record set
  • More than one record can exist in each file
Sr.NoField LabelData TypeLengthNotesMandatory
1Record Type IndicatorText2Must be "TL"Y
2Record Type Version NumberInteger2Must be "6"Y
3Nett Labour CostNumber5.2(e.g., 99999.99)
The values for this field differ based on the job line type and job description type (details provided below)

  • MOT: Will be constant 0
  • OTHER - Catalogue: Will be constant 0
  • OTHER - Non Catalogue: The net labor cost is determined for each labor line by multiplying the time worked by the hourly rate and then factoring in the goodwill percentage.
Y
4VAT Rate LabourNumber2.2(e.g., 99.99)
Mandatory only with an invoice or credit note.
Y
5Total Nett Parts CostNumber5.2(e.g., 99999.99)
The values for this field differ based on the job line type and job description type (details provided below)

  • MOT: Will be constant 0
  • Tyre - Catalogue: Will be constant 0
  • Tyre - Non Catalogue: The export process calculates the net parts cost by accumulating the net price from each part and fluid line
  • OTHER:
    • For Catalogue descriptions that don't belong to FNP, This field will be set to a constant value of 0.
    • For Catalogue descriptions that belong to FNP (i.e., OEM descriptions), are treated as having a net price of zero. Consequently, the total net price for these lines will also be zero.
      On top of this sum, the menu price for the OEC description is added
    • For Non-Catalogue descriptions that do or don't belong to FNP, The export process calculates the net parts cost by accumulating the net price from each part line.
      Note: Non-Catalogue descriptions that belong to FNP are originated from MODULUS
Y
6Total Nett Line CostNumber5.2(e.g., 99999.99)
The final cost is calculated differently depending on the description type. For non-catalogue descriptions, it's the sum of net labor and parts costs from individual lines. For catalogue descriptions, it's directly set to the corresponding catalogue price.
Y
7VAT CodeText1Will be one of the VAT codesY
8End of Record MarkerControl1Carriage Return Code (ASCII 10)Y

Total Transaction Cost Record - TC

  • Must exist in each record set
  • Only one record per Transaction
  • More than one record can exist in an export file
Sr.NoField LabelData TypeLengthNotesMandatory
1Record Type IndicatorText2Must be "TC"Y
2Record Type Version NumberInteger2Must be "6"Y
3Total Nett Labour CostNumber5.2(e.g., 99999.99)
The values for this field differ based on the job line type and job description type (details provided below)

  • MOT: Will be constant 0
  • OTHER - Catalogue: Will be constant 0
  • OTHER - Non Catalogue: The net labor cost is determined for each labor line by multiplying the time worked by the hourly rate and then factoring in the goodwill percentage.
Y
4Total Nett Parts CostNumber5.2(e.g., 99999.99)
The values for this field differ based on the job line type and job description type (details provided below)

  • MOT: Will be constant 0
  • Tyre - Catalogue: Will be constant 0
  • Tyre - Non Catalogue: The export process calculates the net parts cost by accumulating the net price from each part and fluid line
  • OTHER:
    • For Catalogue descriptions that don't belong to FNP, This field will be set to a constant value of 0.
    • For Catalogue descriptions that belong to FNP (i.e., OEM descriptions), are treated as having a net price of zero. Consequently, the total net price for these lines will also be zero.
      On top of this sum, the menu price for the OEC description is added
    • For Non-Catalogue descriptions that do or don't belong to FNP, The export process calculates the net parts cost by accumulating the net price from each part line.
      Note: Non-Catalogue descriptions that belong to FNP are originated from MODULUS
Y
5Total Nett Transaction CostNumber5.2(e.g., 99999.99)
The final cost is calculated differently depending on the description type. For non-catalogue descriptions, it's the sum of net labor and parts costs from individual lines. For catalogue descriptions, it's directly set to the corresponding catalogue price.
Y
6VAT AmountNumber5.2Mandatory with an invoice or credit note
(e.g., 99999.99)
7Total Gross Labour CostNumber5.2Mandatory with an invoice or credit note
(e.g., 99999.99)
The final value is calculated by factoring in the total net labor cost and applying the VAT rate
8Total Gross Parts CostNumber5.2Mandatory with an invoice or credit note
(e.g., 99999.99)
The final value is calculated by factoring in the total net parts cost and applying the VAT rate
9Total Gross Transaction CostNumber5.2Mandatory with an invoice or credit note
(e.g., 99999.99)
The final value is calculated by factoring in the total net jobline cost and applying the VAT rate
Y
10End of Record MarkerControl1Carriage Return Code (ASCII 10)Y

VAT Summary Record - VA

  • One record per VAT code in each Transaction
  • More than one record can exist in a file
  • More than one record can exist in a Transaction
Sr.NoField LabelData TypeLengthNotesMandatory
1Record Type IndicatorText2Must be "VA"Y
2Record Type Version NumberInteger2Must be "6"Y
3VAT RateNumber2.2(e.g., 99.99)Y
4VAT Applicable AmountNumber5.2(e.g., 99999.99)Y
5VAT AmountNumber5.2(e.g., 99999.99)Y
6VAT CodeText1Will be one of the VAT codesY
7End of Record MarkerControl1Carriage Return Code (ASCII 10)Y

Transaction Trailer Record - TT

  • One record must exist for each Transaction
  • More than one record can exist in an export file
Sr.NoField LabelFormatLengthNotesMandatory
1Record Type IndicatorText2Must be "TT"Y
2Record Version NumberInteger2Must be "6"Y
3Number of RecordsInteger5Total number of records between Transaction Header and Transaction Trailer inclusive (excludes authorisation details)Y
4End of Record MarkerControl1Carriage Return Code (ASCII 10)Y

File Trailer Record - FT

  • This record is mandatory
  • This line does not belong to a record set, instead common for the whole file
Sr.NoField LabelFormatLengthNotesMandatory
1Record Type IndicatorText2Must be "FT"Y
2Record Version NumberInteger2Must be "6"Y
3Number of RecordsInteger5Total number of transactionsY
4End of Record MarkerControl1Carriage Return Code (ASCII 10)Y

Setup Required

A Scheduler should be created cloud scheduler with the following parameters

  • Name: Generate daily invoice export
  • Region: europe-west2
  • Frequency: 30 23 * * *
  • TimeZone: GMT London
  • Topic: projects/biddirect-2/topics/generateDailyInvoiceExport
  • Message body: a JSON object including the following parameters
    • dateTimeStamp: in format yyyy-MMM-dd ex 2022-Sep-30 , when skipped it will default to current date
    • leaseId: id of the lease company that the export is desired to be generated for
    • exportFileName: file name prefix to be used for the export file generated, when skipped defaults to 'invoice'
Status: Accepted
Category: Protected
Authored By: Rama on Sep 01, 2023
Revisions
03 Jun, 2024 - Resolved Documentation Discrepancy, VN-12905
23 Apr, 2024 - Update Post paybill Integration, VN-11017
09 Feb, 2024 - Update Post FNP Integration, VN-11235
11 Jan, 2024 - Change content in daily invoice export, VN-10934
20 Nov, 2023 - changes with respect to code
22 Sep, 2023 - Add Daily Invoice Export Documentation, VN-9668